<!DOCTYPE HTML>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<button id="button"></button>
<iframe id="iframe"></iframe>
<script>
// This is a crash reproduction case for crbug.com/626750.

// Things are expected to happen in this order:
// 1. window.onload event fires
// 2. button.focus()
// 3. button's focus event handler is called
// 4. iframe.contentWindow.focus()
// 5. button's blur event handler is called (due to 4)
// 6. document.open() (detaches <iframe>)
// 7. focus in iframe blurs
// 8. iframe is set to active while detached <- crash due to crbug.com/626750
// 9. script execution gets back to button's focus event handler
//    (4-8 happen while iframe.contentWindow.focus() is handled)

async_test((test) => {
    button.addEventListener('focus', test.step_func_done(() => {
        iframe.contentWindow.focus();
        assert_equals(document.activeElement, null, 'blur handler properly finished.');
    }));

    button.addEventListener('blur', test.step_func(() => {
        // This detaches <iframe>.
        document.open();
    }));

    window.addEventListener('load', () => button.focus());
}, 'focusing on detached frame should not crash');
</script>
